package text06;

import java.util.ArrayList;
import java.util.List;

/**
 * 型变
 *  1)不变：赋值运行符左右两边的泛型必须一致
 *
 *  2)协变：子类型的泛型可以赋值给父类型的泛型 - 通配符
 *      类<? extends 父类> 对象 = new 类<子类>() ;
 *      ArrayList<? extends Animal> list = new ArrayList<Dog>();
 *
 *
 */

public class MainTest {
    public static void main(String[] args) {
        // 正确 - 多态 - 父类对象可以接收任意的子类对象 - 协变性
        Animal a = new Dog();

        // 错误 - 泛型不支持协变
        // 也就是说，等号左右两边的泛型必须一致！ - 泛型的不变性
        // List<Animal> list = new ArrayList<Dog>();

        // 思考：如何实现像多态一样，让泛型实现协变 - 通配符
    }
}
